// Qui sono descritti i messaggi interni al peer.
// Non fanno parte del protocollo. 

// superclasse dei messaggi interni
message InternalMsg {}

// quando ricevuto, il peer si unisce allo swarm
message JoinSwarm extends InternalMsg {
    // se true inizia con torrent vuoto, altrimenti vedi random
	bool empty; 
	// se true continua il torrent precedentemente interrotto, altrimenti lo inizializza a random
	// non significativo se empty==true
	bool againRandom;
}

// quando ricevuto, il peer lascia lo swarm
message LeaveSwarm extends InternalMsg {}

// quando ricevuto, il peer esegue l'algoritmo di choking
message ChokingAlgorithm extends InternalMsg {

  //int sec; //num == 10 --> sono passati 10s, num == 20 sono passati 20s, num == 30 sono passati 30s

}

// quando ricevuto, il peer aggiorna i rate di download e di upload
message UpdateRate extends InternalMsg {}

// se viene ricevuto questo msg interno, significa che non ho ricevuto alcun msg di BitTorrent
// proveniente da quel peer remoto
message PeerTimeout extends InternalMsg {
    int remotePeerID;
}

// ricorda al peer di fare una nuova richiesta al tracker
message TrackerRegularRequest extends InternalMsg {
}

// ricorda al mio peer di inviare i messaggi di KeepAlive agli altri peer remoti per mantenere in vita la mia connessione
message StartKeepAlive extends InternalMsg {}

message ExtractIncomingMsg extends InternalMsg {}

message ExtractOutgoingMsg extends InternalMsg {
	int queueIndex= 0; // usato da cloud
}

// messaggio speciale mandato dal cloud ai peer per segnalare l'inizio e la fine di uno stream continuo di dati
message DataStream extends InternalMsg {
    // true = inizio dello stream
    // false = fine dello stream
    bool start;
}
